﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using System.Data;
using System.Xml.Linq;
using System.Threading;

namespace Elysium.Demo.Bancos.Catalogos
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class TipoCambio_Consulta : UserControl
    {
        UsuarioActivo _sesion;
        List<CMoneda> monedas;

        public TipoCambio_Consulta(ref UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;
            ObtenerTipoDeCambioWS();
            CargarTodosTiposCambio();
        }        

        private void CargarTodosTiposCambio()
        {
            monedas = new List<CMoneda>();

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Moneda(_sesion.RFC, _sesion.UserName);
            
            var monedasdb = db.Get_Monedas().Rows;

            foreach (DataRow moneda in monedasdb)
            {
                var Id = moneda["Id_Moneda"].ToString();
                var Clave = moneda["Clave"].ToString();
                var Simbolo = moneda["Simbolo"].ToString();
                var Nombre = moneda["Nombre"].ToString();
                var Cambio = moneda["TipoCambio"].ToString();
                monedas.Add(new CMoneda(Id, Clave, Simbolo, Nombre, Cambio));
            }

            MonedasDataGrid.ItemsSource = monedas;
        }

        public class CMoneda
        {
            public string Id { get; set; }
            public string Clave { get; set; }
            public string Simbolo { get; set; }
            public string Nombre { get; set; }
            public string Cambio { get; set; }

            public CMoneda(string Id, string Clave, string Simbolo, string Nombre, string Cambio)
            {
                this.Id = Id;
                this.Clave = Clave;
                this.Simbolo = Simbolo;
                this.Nombre = Nombre;
                this.Cambio = Cambio;
            }
        }


        private void ObtenerTipoDeCambioWS()
        {
            new Thread(delegate()
            {
                ServiceReference.DgieWSPortClient ws = new ServiceReference.DgieWSPortClient();
                var s = ws.tiposDeCambioBanxico();
                
                DolaresLabel.Dispatcher.BeginInvoke((Action)(() => 
                             DolaresLabel.Content = SIIE_ERP.Codigo.Bancos.Catalogos.TipoDeCambioCode.ObtenerTipoCambioDolar(s)));
                EurosLabel.Dispatcher.BeginInvoke((Action)(() => 
                             EurosLabel.Content = SIIE_ERP.Codigo.Bancos.Catalogos.TipoDeCambioCode.ObtenerTipoCambioEuro(s)));
                
            }).Start();            
        }

        private void MonedasDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            CMoneda moneda = e.Row.Item as CMoneda;
            TextBox editado = e.EditingElement as TextBox;

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_TipoCambio(_sesion.RFC, _sesion.UserName);

            double nuevoValor = 0.00;

            try
            {
                nuevoValor = Double.Parse(editado.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("El valor debe ser numérico.");
                editado.Text = moneda.Cambio;
                return;
            }

            if (db.Update_TipoCambio_Por_Id(Int32.Parse(moneda.Id), nuevoValor).Id != 1)
            {
                MessageBox.Show("Error al editar el tipo de cambio.");
                editado.Text = moneda.Cambio;
            }
        }

        private void Button_Actualiza_Click(object sender, RoutedEventArgs e)
        {
            double nuevoDolar, nuevoEuro;

            try
            {
                nuevoEuro = double.Parse(EurosLabel.Content.ToString());
                nuevoDolar = double.Parse(DolaresLabel.Content.ToString());
            }
            catch (Exception)
            {
                return;
            }

            var IdEuros = monedas.FirstOrDefault(x => x.Nombre == "Euros").Id;
            var IdDolares = monedas.FirstOrDefault(x => x.Nombre == "Dólares Americanos").Id;

            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_TipoCambio(_sesion.RFC, _sesion.UserName);

            if (db.Update_TipoCambio_Por_Id(Int32.Parse(IdEuros), nuevoEuro).Id != 1 ||
                db.Update_TipoCambio_Por_Id(Int32.Parse(IdDolares), nuevoDolar).Id != 1)
            {
                MessageBox.Show("Error al editar el tipo de cambio.");
            }
            else
            {
                CargarTodosTiposCambio();
            }
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("Tipo_cambio.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }
    }
}
